package com.example.studymoudle.observer_design_pattern;

public abstract class Observable<T> implements ObservableSource{
    //具体被观察者
    @Override
    public void subscribe(Observer observer) {
        //我们把这个订阅的功能让Observable的子类去完成
        subscribeActual(observer);
    }

    protected abstract void subscribeActual(Observer<T> observer);

    //创造被观察者的实例
    public static<T> Observable<T> create(ObservaleOnSubscribe<T> source){
        return new ObservableCreate(source);
    }

    //创建被观察者
    public<U> Observable<U> map(Function<T,U> function){
        return new ObservableMap<>(this,function);
    }


    //被观察者的线程切换

    public final Observable<T> subscribeOn(){
        return null;
    }

    //观察者的线程切换
    public final Observable<T> observeOn(){
        return null;
    }

}
